iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Python

眾裏尋它:Python表格利器Great Tables系列 第 15

[Day15] - 依據表格值套用背景顏色

  • 分享至 

  • xImage
  •  

GT.data_color()可以讓我們依據表格值來套用背景顏色。

以下我們將使用內建的exibble dataset所生成的df DataFrame,來作為本日說明的範例:

import polars as pl
from great_tables import GT
from great_tables.data import exibble


df = pl.from_pandas(exibble)
shape: (8, 9)
┌──────────┬────────────┬───────┬────────────┬───┬──────────┬───────┬───────┐
│ num      ┆ char       ┆ fctr  ┆ date       ┆ … ┆ currency ┆ row   ┆ group │
│ ---      ┆ ---        ┆ ---   ┆ ---        ┆   ┆ ---      ┆ ---   ┆ ---   │
│ f64      ┆ str        ┆ str   ┆ str        ┆   ┆ f64      ┆ str   ┆ str   │
╞══════════╪════════════╪═══════╪════════════╪═══╪══════════╪═══════╪═══════╡
│ 0.1111   ┆ apricot    ┆ one   ┆ 2015-01-15 ┆ … ┆ 49.95    ┆ row_1 ┆ grp_a │
│ 2.222    ┆ banana     ┆ two   ┆ 2015-02-15 ┆ … ┆ 17.95    ┆ row_2 ┆ grp_a │
│ 33.33    ┆ coconut    ┆ three ┆ 2015-03-15 ┆ … ┆ 1.39     ┆ row_3 ┆ grp_a │
│ 444.4    ┆ durian     ┆ four  ┆ 2015-04-15 ┆ … ┆ 65100.0  ┆ row_4 ┆ grp_a │
│ 5550.0   ┆ null       ┆ five  ┆ 2015-05-15 ┆ … ┆ 1325.81  ┆ row_5 ┆ grp_b │
│ null     ┆ fig        ┆ six   ┆ 2015-06-15 ┆ … ┆ 13.255   ┆ row_6 ┆ grp_b │
│ 777000.0 ┆ grapefruit ┆ seven ┆ null       ┆ … ┆ null     ┆ row_7 ┆ grp_b │
│ 8.88e6   ┆ honeydew   ┆ eight ┆ 2015-08-15 ┆ … ┆ 0.44     ┆ row_8 ┆ grp_b │
└──────────┴────────────┴───────┴────────────┴───┴──────────┴───────┴───────┘

GT.data_color()

GT.data_color(self, columns=None, rows=None, palette=None, domain=None, na_color=None, alpha=None, reverse=False, autocolor_text=True)

GT.data_color()是一個威力強大的功能,但它需要仰賴使用者細心地調整參數,如果您直接使用預設的GT.data_color()至表格的話,版面一般都會過於雜亂。例如:

(GT(df).data_color())

default

因此,正確的GT.data_color()使用方式應該是針對不同欄位各自給定適合的參數。此外,由上可以觀察出來,GT.data_color()不僅可以作用在數值型別的欄位,也可以作用在str型別的欄位。

下面我們展示針對「"row"」欄位,使用palette參數來指定喜愛的背景顏色風格:

(GT(df).data_color(columns="row", palette="Blues"))

palette

palette參數共有數十種選項,可以參考官方文件來挑選。

此外,palette參數也支援傳入一個list,裡面可以包含多種顏色,gt依此產生漸層效果。例如:

(
    GT(df).data_color(
        columns="row", palette=["rebeccapurple", "white", "orange"]
    )
)

multiple colors

對於數值型別欄位,我們可以透過指定domain參數來控制其背景顏色。例如這裡我們針對「"num"」欄位,指定domain參數範圍為0~5600:

(GT(df).data_color(columns="num", palette="Oranges", domain=[0, 5600]))

domain

如果不在此0~5600範圍的行將會顯示na_color參數所設定的顏色(預設為「"#808080"」)。

當然您也可以主動設定na_color參數為想要的顏色,例如指定為「"lightgreen"」:

(
    GT(df).data_color(
        columns="num",
        palette="Oranges",
        domain=[0, 5600],
        na_color="lightgreen",
    )
)

na_color

如果有多個欄位需要調整的話,可以多次呼叫GT.data_color()。例如針對「"num"」欄位及「"currency"」欄位分別使用適合的參數來呼叫GT.data_color()

(
    GT(df)
    .data_color(
        columns="num",
        palette="Oranges",
        domain=[0, 5600],
        na_color="lightgreen",
    )
    .data_color(
        columns="currency",
        palette="Purples",
        domain=[0, 50],
        na_color="lightgreen",
    )
)

multiple calls

最後別忘了rows參數可以指定想顯示的行數。例如指定rows參數為「"currency"」欄位中小於50的行數:

(
    GT(df).data_color(
        columns="currency",
        rows=pl.col("currency").lt(50),
        palette="Purples",
        domain=[0, 50], # not influenced by `rows`
        na_color="lightgreen",
    )
)

rows

這邊需留意,GT.data_color()的顏色計算是根據所有行數而來,並不會因為給定rows參數後,而僅選取部份行數來計算顏色。rows參數的功用只是在顏色計算完成後,指定想顯示的行數。

Code

本日程式碼傳送門


上一篇
[Day14] - 顯示圖片
下一篇
[Day16] - 生成概略趨勢圖(Nanoplot)
系列文
眾裏尋它:Python表格利器Great Tables30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言